package com.company.class11;

import com.company.class10.Animal;
import com.company.class10.Cat;
import com.company.class10.Dog;

/**
 * @Classname PolyTest
 * @Description 类型说明
 * @Date 2022/5/6 22:48
 * @Created by zbw
 */

public class PolyTest {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.eat("肉");
        System.out.println("-----------------继承重写-----------");
        //向上转型
        Animal animal1 = new Dog();
        animal1.eat("肉");
        //向上转型之后，会隐藏子类中扩展实现的方法和属性
        //并且调用父类中被重写的方法的时候，调用的是子类的重写过的方法，从而产生多态。
//        animal1.watchDoor();
//        animal1.ear();
        //向下转型，将父类变量转换为原本指向的子类的对象变量
        Dog dogA = (Dog) animal1;
        //向下转型之后，对应子类的扩展方法和属性就可以使用了
        //原本继承的方法和重写方法都可以继续使用
        dogA.watchDoor();
        System.out.println(dogA.ear);
        dogA.eat("肉");

        Animal animal2 = new Cat();
        animal2.eat("鱼");
        //不能将原本是其他子类类型的父类对象转成另一个子类类型
        Dog dogB = (Dog) animal2;

    }
}
